# 作者：位微
# 你不是在写代码而是在解决问题
# 2025年09月10日10时11分29秒
# 2062873410@qq.com
import socket
import struct
import os

tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_server.bind(('127.0.0.1', 8080))
tcp_server.listen(5)
client_socket,addr=tcp_server.accept()
filename='1.txt'
filename_len_bytes=struct.pack('I',len(filename.encode('utf-8')))
# print(filename_len_bytes)
# pack将整形变为字节流然后再发送
# ‘I’关键字对于unsigned INT 类型4个字节
client_socket.send(filename_len_bytes)# 发送火车头
# 防止发送中文名时出现乱码对filename进行utf-8编码
client_socket.send(filename.encode('utf-8'))
file_len=os.path.getsize(filename)#火车头
# 需要对整型数进行编码，再将编码发送出去
file_len_bytes=struct.pack('I',file_len)
client_socket.send(file_len_bytes)
file=open(filename,'rb')
# 因为是一2进制形式读的所以不再需要编码
while True:
    data=file.read(1024)
    if not data:
        print("传输完毕！！！")
        break
    client_socket.send(data)
file.close()
client_socket.close()
tcp_server.close()